// 后端服务地址
const BASE_URL = 'http://localhost:9204'

// Token存储key
const TOKEN_KEY = 'orderSystem_token'
const USER_INFO_KEY = 'orderSystem_userInfo'

/**
 * 认证相关工具函数
 */
export const auth = {
	// 设置token
	setToken(token) {
		uni.setStorageSync(TOKEN_KEY, token)
	},

	// 获取token
	getToken() {
		return uni.getStorageSync(TOKEN_KEY) || ''
	},

	// 移除token
	removeToken() {
		uni.removeStorageSync(TOKEN_KEY)
	},

	// 设置用户信息
	setUserInfo(userInfo) {
		uni.setStorageSync(USER_INFO_KEY, userInfo)
	},

	// 获取用户信息
	getUserInfo() {
		return uni.getStorageSync(USER_INFO_KEY) || {}
	},

	// 移除用户信息
	removeUserInfo() {
		uni.removeStorageSync(USER_INFO_KEY)
	},

	// 检查是否已登录
	isLoggedIn() {
		const token = this.getToken()
		return !!token
	},

	// 清除所有认证信息
	clearAuth() {
		this.removeToken()
		this.removeUserInfo()
	}
}

/**
 * 用户登录
 * @param {Object} loginData 登录数据
 */
export function login(loginData) {
	return new Promise((resolve, reject) => {
		uni.showLoading({
			title: '登录中...',
			mask: true
		})
		
		uni.request({
			url: BASE_URL + '/api/auth/login',
			method: 'POST',
			data: loginData,
			header: {
				'Content-Type': 'application/json'
			},
			success: (res) => {
				uni.hideLoading()
				if (res.statusCode === 200) {
					const data = res.data
					if (data.code === 200) {
						// 保存token和用户信息
						auth.setToken(data.data.token)
						auth.setUserInfo(data.data)


						// 验证保存结果
						console.log('=== 保存验证 ===')
						console.log('保存的Token:', auth.getToken())
						console.log('保存的用户id:', auth.getUserInfo().userId)
						console.log('===============')

						
						resolve(data)
					} else {
						reject(data)
					}
				} else {
					reject({
						code: res.statusCode,
						msg: '网络请求失败'
					})
				}
			},
			fail: (err) => {
				uni.hideLoading()
				reject({
					code: -1,
					msg: '网络连接失败',
					data: err
				})
			}
		})
	})
}

/**
 * 用户注册
 * @param {Object} registerData 注册数据
 */
export function register(registerData) {
	return new Promise((resolve, reject) => {
		uni.showLoading({
			title: '注册中...',
			mask: true
		})
		
		uni.request({
			url: BASE_URL + '/api/auth/register',
			method: 'POST',
			data: registerData,
			header: {
				'Content-Type': 'application/json'
			},
			success: (res) => {
				uni.hideLoading()
				if (res.statusCode === 200) {
					const data = res.data
					resolve(data)
				} else {
					reject({
						code: res.statusCode,
						msg: '网络请求失败'
					})
				}
			},
			fail: (err) => {
				uni.hideLoading()
				reject({
					code: -1,
					msg: '网络连接失败',
					data: err
				})
			}
		})
	})
}

/**
 * 检查手机号是否已存在
 * @param {String} userTel 手机号
 */
export function checkPhoneExists(userTel) {
	return new Promise((resolve, reject) => {
		uni.request({
			url: BASE_URL + '/api/auth/checkPhone',
			method: 'GET',
			data: { userTel },
			header: {
				'Content-Type': 'application/json'
			},
			success: (res) => {
				if (res.statusCode === 200) {
					const data = res.data
					resolve(data)
				} else {
					reject({
						code: res.statusCode,
						msg: '网络请求失败'
					})
				}
			},
			fail: (err) => {
				reject({
					code: -1,
					msg: '网络连接失败',
					data: err
				})
			}
		})
	})
}

/**
 * 获取用户信息
 */
export function getUserInfo() {
	return new Promise((resolve, reject) => {
		const token = auth.getToken()
		
		uni.request({
			url: BASE_URL + '/api/auth/userInfo',
			method: 'GET',
			header: {
				'Content-Type': 'application/json',
				'Authorization': 'Bearer ' + token
			},
			success: (res) => {
				if (res.statusCode === 200) {
					const data = res.data
					if (data.code === 401) {
						// token失效，清除认证信息
						auth.clearAuth()
					}
					resolve(data)
				} else {
					reject({
						code: res.statusCode,
						msg: '网络请求失败'
					})
				}
			},
			fail: (err) => {
				reject({
					code: -1,
					msg: '网络连接失败',
					data: err
				})
			}
		})
	})
}

/**
 * 用户退出登录
 */
export function logout() {
	return new Promise((resolve) => {
		auth.clearAuth()
		uni.showToast({
			title: '退出成功',
			icon: 'success'
		})
		
		// 跳转到登录页
		setTimeout(() => {
			uni.reLaunch({
				url: '/pages/login/login'
			})
		}, 1500)
		
		resolve()
	})
}

/**
 * 检查登录状态，未登录则跳转到登录页
 */
export function checkLogin() {
	if (!auth.isLoggedIn()) {
		uni.showModal({
			title: '提示',
			content: '请先登录',
			showCancel: false,
			success: () => {
				uni.navigateTo({
					url: '/pages/login/login'
				})
			}
		})
		return false
	}
	return true
}
